//
// Created by LiuYou on 2021/5/9.
//

#include <cstdio>
#include <cstdlib>
#include <glob.h>
#include <cstring>

#if 0

static int errFunc(const char* errpath, int errorNum) {
    std::puts(errpath);
    fprintf(stderr, "ERROR MSG: %s\n", std::strerror(errorNum));
    return 0;
}

#endif

int main(int argc, char** argv) {

    // 解析 /etc/ 目录下的 *.conf 文件
//    const char* const PATTERN = "/etc/*.conf";
    // 解析 /etc/ 目录下所有的内容(注意这里不包括隐藏文件)
    const char* const PATTERN = "/etc/*";
    // 解析 /etc/ 目录下所有的隐藏内容(注意这里包括了隐藏文件)
//    const char* const PATTERN = "/etc/.*";

    // 这个结构体定义变量, 真的一会儿要加struct一会儿不用加。啊。
    glob_t globResult{};
    // 第二个参数是一个位图: 写成0表示没有什么要求, 一切跟着默认走。
    // 如果不关心失败的原因和失败路径的话, 可以将第三个参数设置为NULL
    //
    int err = glob(PATTERN, 0, NULL, &globResult);
    if (err) {
        // 这个这个出错不会设置errno值, 那就直接打印信息即可。
        std::fprintf(stderr, "Error code = %d\n", err);
        std::exit(1);
    }
    for (int i = 0; i < globResult.gl_pathc; ++i) {
        std::puts(globResult.gl_pathv[i]);
    }
    globfree(&globResult);


    return 0;
}